/*
 * GoogleMaps для полей
 */
var Map = 
{

map:null,
placemark:null,
params:null,

showPlayfieldMap:function(params)
{
	if (GBrowserIsCompatible()){
		var map = new GMap2(document.getElementById(params.idMaps));
		map.setCenter(new GLatLng(params.coordY,params.coordX), 14);
		map.setUIToDefault();
		map.enableRotation();
		map.addOverlay(Map.createMarker(map, new GLatLng(params.coordY,params.coordX), params.playfield_id, params.address));
	}
},

getAddress:function(Data,Path)
{
	var s='';var val='';
	if(typeof(Path)=='undefined'){Path=[];}
	if(typeof(Data)=='object'){
		for(var i in Data){
			if ( i=='id' || i=='address'|| i=='Accuracy' || i=='SubAdministrativeAreaName' ) continue;
			if ( i=='ExtendedData' || i=='Point' || i=='PostalCode' || i=='DependentLocalityName' ) continue;
			if ( i=='CountryName' || i=='CountryNameCode' || i=='LocalityName' || i=='AdministrativeAreaName' ) continue;
			Path.push(i);
			val=this.getAddress(Data[i],Path);
			if(val!==null){s=(s?s+', ':'')+val;}
			Path.pop();
		}
		return s;
	}else{
		val=Data;
		return val;
	}
},

dragPoint:function(el)
{
	var geocoder = new YMaps.Geocoder(City.getCityValue(el));
	YMaps.Events.observe(geocoder, geocoder.Events.Load, function () {
		if (this.length()) {
			Map.map.setCenter(this.get(0).getGeoPoint());
		}
	});
},

openBalloon:function(obj)
{
	var coords = Map.placemark.getLatLng();
	var cGClientGeocoder = new GClientGeocoder();
	cGClientGeocoder.getLocations(coords, function(status){
		var address = Map.getAddress(status.Placemark[0].AddressDetails);
		document.getElementById(Map.params.idAddress).value = address;
		Map.placemark.openInfoWindowHtml(address);
	});
	document.getElementById(Map.params.idCoords).value = coords.lng()+','+coords.lat();
},

closeBalloon:function(obj)
{
	Map.placemark.closeInfoWindow();
},

init:function(params)
{
	this.params = params;
	this.map = new GMap2(document.getElementById(this.params.idMaps));
	this.map.setCenter(new GLatLng(this.params.defaultCoordY,this.params.defaultCoordX), 11); // переопределить координаты центра
	this.map.setUIToDefault();
	this.map.enableRotation();
	
	// Привязываем событие на установку метки (адрес + координаты)
	var mapClick = GEvent.addListener(Map.map, 'click', function(overlay, cursorPoint){
		// Удаляем метку, если она уже есть
		if ( Map.placemark != null ){
			Map.map.removeOverlay(Map.placemark);
		}

		// Создаем и добавляем красную метку на карту
		Map.placemark = new GMarker(cursorPoint,{draggable:true, autoPan:false});
		Map.map.addOverlay(Map.placemark);

		// Вешаем обработчики событий
		GEvent.addListener(Map.placemark, 'dragend', Map.openBalloon);
		//GEvent.addListener(Map.placemark, 'MouseEnter', Map.closeBalloon);
		GEvent.addListener(Map.placemark, 'dragstart', Map.closeBalloon);

		// Вызываем событие сразу
		Map.openBalloon(this);
	});

	if ( this.params.playfields.length ){
		var placemark = [];
		for ( var i=0; i<this.params.playfields.length; i++ ){
			placemark[this.params.playfields[i].id] = this.createMarker(this.map, new GLatLng(this.params.playfields[i].coordY,this.params.playfields[i].coordX), this.params.playfields[i].id, this.params.playfields[i].address);
			this.map.addOverlay(placemark[this.params.playfields[i].id]);
		}
	}
},

createMarker:function(map, latlng, number, text)
{
	var stadiumIcon = new GIcon(G_DEFAULT_ICON);
	stadiumIcon.image = '/common/img/icon_stadium.png';
	stadiumIcon.iconSize = new GSize(27,26);
	stadiumIcon.shadowSize = new GSize(0,0);
	var marker = new GMarker(latlng, {icon: stadiumIcon});
	marker.value = number;
	GEvent.addListener(marker,"click", function() {
		map.openInfoWindowHtml(latlng, text);
	});
	return marker;
}

} // Map